package com.he.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.he.domain.Result;
import com.he.domain.dto.*;
import com.he.domain.vo.*;
import com.he.entity.User;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @author He
 * @version 1.0
 * @Date 2023/9/7 16:49
 * @Desc 用户业务接口
 */
public interface UserService extends IService<User> {

    /**
     * 用户注册
     * @param register
     * @return Result<?>
     */
    Result<?> register(RegisterDTO register);

    /**
     * 获取登录用户信息
     * @return UserInfoVO
     */
    UserInfoVO getUserInfo();

    /**
     * 更新用户信息
     * @param userInfoDTO
     */
    void updateUserInfo(UserInfoDTO userInfoDTO);

    /**
     * 修改用户密码
     * @param userPasswordDTO
     */
    void updatePassword(UserPasswordDTO userPasswordDTO);

    /**
     * 修改用户头像
     * @param file
     * @return 头像地址
     */
    String updateAvatar(MultipartFile file);

    /**
     * 获取后台登录用户信息
     *
     * @return 后台用户信息
     */
    UserBackInfoVO getUserBackInfo();

    /**
     * 获取登录用户菜单
     *
     * @return 登录用户菜单
     */
    List<RouterVO> getUserMenu();

    /**
     * 修改管理员密码
     *
     * @param password 密码
     */
    void updateAdminPassword(PasswordDTO password);

    /**
     * 查看用户角色选项
     *
     * @return 用户角色选项
     */
    PageResult<UserBackVO> listUserBackVO(ConditionDTO condition);

    /**
     * 查看用户角色选项
     *
     * @return 用户角色选项
     */
    List<UserRoleVO> listUserRoleDTO();

    /**
     * 修改用户
     *
     * @param user 用户信息
     */
    void updateUser(UserRoleDTO user);

    /**
     * 禁用用户
     *
     * @param disable 禁用
     * @return 在线用户列表
     */
    void updateUserStatus(DisableDTO disable);

    /**
     * 查看在线用户列表
     *
     * @param condition 条件
     * @return 在线用户列表
     */
    PageResult<OnlineVO> listOnlineUser(ConditionDTO condition);

    /**
     * 下线用户
     *
     * @param userId 在线用户id
     */
    void kickOutUser(String userId);

    /**
     * 删除用户
     *
     * @param id 用户id
     */
    void deleteUser(Integer id);
}
